//表单
export type optionsBody = {
  //文本
  text: string
  value: string | number
}

//富文本编辑器配置
export type editorOptionsBody = {
  //编辑器高度
  height?: string
  //自定义工具栏配置
  toolbarKeys?: string[]
  //插入新工具到指定位置
  insertKeys?: { index: number; keys: string[] }
  /** 排除的工具栏项 */
  excludeKeys?: string[]
  /** 编辑器模式 */
  mode?: 'default' | 'simple'
  /** 占位符文本 */
  placeholder?: string
  /** 上传配置 */
  uploadConfig?: {
    maxFileSize?: number
    maxNumberOfFiles?: number
    server?: string
  }
}

//表单主题
export interface CustomFormBody {
  //类型
  type: string
  //描述
  title: string
  //对应的表单名称
  name: string
  //栅格，24为一行
  span?: number
  //是否隐藏
  hidden?: boolean
  //枚举数据
  options?: optionsBody[]
  //默认值
  default?: string | number
  //是否禁用
  disabled?: boolean
  //多行文本行数
  rows?: number
  //富文本编辑器配置
  editorOptions?: editorOptionsBody
}

export const CustomFormColumnsType = {
  input: 'input',
  password: 'password',
  radio: 'radio',
  select: 'select',
  textarea: 'textarea',
  editor: 'editor'
}

// type CustomAnyObject = { [key: string]: any }

//表单验证规则类型
type FormRuleType = {
  //是否必填
  required: boolean
  //未填写时的描述
  message: string
  //行为
  trigger: string
  //自定义验证规则
  validator?: (rule: any, value: any, callback: any) => void
}

//表单属性
export interface CustomInterfaceFormBody {
  //是否是编辑
  isEdit?: boolean
  //获取数据主键的key
  primaryKey?: string
  //获取数据的函数
  getFun?: (...params: any[]) => any
  //添加数据的函数
  addFun?: (...params: any[]) => any
  //编辑数据的函数
  editFun?: (...params: any[]) => any
  //表单的列
  columns?: CustomFormBody[]
  //表单验证规则
  rules?: {
    [key: string]: FormRuleType[]
  }
  //传递的记录数据
  record?: any
}

export interface CustomFormEmits {
  (e: 'update:visible', value: boolean): void
  (e: 'submit', value: any): void
}
